package genericity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 
 *
 *@类名称：GTest.java
 *@类描述：泛型测试类
 *@创建人：zhongy
 *@创建时间：2018年3月26日-下午9:22:52
 *@修改备注:
 *@version
 */
public class GTest {
	public static final String SPLIT="==============================================";
	public static void main(String[] args) {
		
		testGClass();
		testGMothod("str", "str");
		testPECSRule();
	}
	/**
	 * 
	 *@描述  ：类泛型测试
	 *@创建人：zhongy
	 *@创建时间：2018年3月26日 下午9:32:41
	 *@修改人：
	 *@修改时间：
	 *@修改描述：
	 */
	public static void testGClass(){
		Box<String> strBox=new Box<>();
		strBox.setT("strBox");
		Box<Integer> integerBox=new Box<>();
		integerBox.setT(1);
		System.out.println("泛型类：拓展了类的通用性"+strBox+","+integerBox);
		System.out.println(SPLIT);
	}
	
	
	/**
	 * 
	 *@描述  ：方法参数泛型测试
	 *@创建人：zhongy
	 *@创建时间：2018年3月26日 下午9:42:29
	 *@修改人：
	 *@修改时间：
	 *@修改描述：
	 *@param key
	 *@param value
	 */
	public static <K,V> void testGMothod(K key,V value){
		Map<K,V> map=new HashMap<K, V>();
		map.put(key, value);
		System.out.println("泛型方法：a、定义在返回值之前；b、数据类型从外部传入");
		System.out.println(SPLIT);
	}
	
	
	
	
	
	public static void testPECSRule(){
		
		List<? extends Object> l=new ArrayList<Integer>();
		l.add(null);
		System.out.println("只读：实现了<? extends T>的集合类只能将它视为Producer向外提供(get)元素");
		
		List<? super Integer> s1=new ArrayList<Integer>();
		List<? super String> s2=new ArrayList<String>();
		s1.add(1);
		System.out.println(s1.get(0));
		
		
		
	}
	

}
